perm filename DDDPY.FAI[GO,ALS] blob sn#105691 filedate 1974-06-12 generic text, type T, neo UTF8
00100	TITLE DISPLY  -- DISPLAY PRIMITIVES
00200
00300	OPDEF DPYPOS [XWD 702100,0]
00400	OPDEF DPYSIZ [XWD 702140,0]
00500	OPDEF DPYCLR [XWD 701000,0]
00600	OPDEF UPG [XWD 703000,0]
00700	OPDEF GETLIN [TTYUUO 6,]
00800
00900
01000	EXTERNAL USERERR
01100	A←1
01200	B←2
01300	C←3
01400
01500	SP←16
01600	P←17
01700
01800	INTERNAL DPYSET,AIVECT,AVECT,APT,RIVECT,RVECT,RPT
01900	INTERNAL APOINT,RPOINT,AVECW,AIVECW,RVECW,RIVECW,APOINW,GVECW
02000	INTERNAL LOCATE,DJUMP,DJSR,FIXUP,DPYOUT,HYDPOG,DPYCLR,DPYBIG,DPYBRT
02100	INTERNAL DPYRESET,DPYPARS
02200	INTERNAL CLRBFR,GVECT,DTYO,DPYSST
02300
02400	RV←←6
02500	AV←←106
02600	VIS←←0
02700	EP←←20
02800	INV←←40
02900	SVS←100
03000	SV←2
03100	DEFINE COMPAT(N)<
03200		POP P,RETURN
03300		JSP COMP-N>
03400	
03500		POP P,5
03600		POP P,4
03700		POP P,3
03800		POP P,2
03900		POP P,1
04000	COMP:	JRST @0
04100	
     

00100	;SAIL DECLARATIONS
00200	;EXTERNAL PROCEDURE GVECT(INTEGER X,Y,OP,SIZE,BRT);
00300	;EXTERNAL PROCEDURE AIVECT(INTEGER X,Y)
00400	;EXTERNAL PROCEDURE AVECT(INTEGER X,Y)
00500	;EXTERNAL PROCEDURE APT(INTEGER X,Y)
00600	;EXTERNAL PROCEDURE RIVECT(INTEGER X,Y)
00700	;EXTERNAL PROCEDURE RVECT(INTEGER X,Y)
00800	;EXTERNAL PROCEDURE RPT(INTEGER X,Y)
00900	
01000	GVECT:	COMPAT(5)
01100		DPB C+1,[POINT 3,C,27]
01200		DPB C+2,[POINT 3,C,24]
01300		JRST LVC
01400
01500	AIVECT:	MOVEI C,INV+AV
01600		JRST LV
01700	AVECT:	MOVEI C,VIS+AV
01800		JRST LV
01900	APOINT:
02000	APT:	MOVEI C,EP+AV
02100	LV:	COMPAT(2)
02200	LVC:	DPB A,[POINT 11,C,10]
02300		DPB B,[POINT 11,C,21]
02400	LV2:	AOS A,DPYPTR
02500		MOVEM C,(A)
02600	LV3:	HRLI A,<(<POINT 7,0,35>)>
02700		MOVEM A,DPYPTR
02800		HRRZI A,(A)
02900		CAML A,BUFEND
03000		JRST DPYOVF
03100		JRST @RETURN
03200	
03300	DPYOVF:	PUSH P,[0]
03400		PUSH P,[1]	;ALLOW CONTINUE
03500		PUSH SP,[=19]
03600		PUSH SP,[POINT 7,[ASCIZ /DPY BUFFER OVERFLOW/]]
03700		PUSHJ P,USERERR
03800		SOS DPYPTR
03900		JRST @RETURN
04000
04100	RIVECT:	MOVEI C,INV+RV
04200		JRST RVG
04300	RVECT:	MOVEI C,VIS+RV
04400		JRST RVG
04500	RPOINT:
04600	RPT:	MOVEI C,EP+RV
04700	RVG:	COMPAT(2)
04800		SKIPE RELFLG#
04900		JRST LVC
05000		CAML A,[-SVS]
05100		CAIL A,SVS
05200		JRST LVC
05300		CAML B,[-SVS]
05400		CAIL B,SVS
05500		JRST LVC
05600		ANDCMI C,RV	;CAN CONSTRUCT SHORT VECTOR
05700		DPB A,[POINT 7,C,22]
05800		DPB B,[POINT 7,C,29]
05900		LSH C,20
06000		ORI C,SV+INV	;MAKE 2ND VECTORE INVISIBLE - ZERO LENGTH
06100		MOVE A,@DPYPTR
06200		TLZ A,777774
06300		CAIE A,(C)	;WAS LAST DPY OUTPUT A SHORT VECTOR WORD WITH 
06400				;2ND VECTOR ZERO?
06500		JRST LV2	;NO
06600		LSH C,-24	;YES, PUT IT THERE
06700		DPB C,[POINT 16,@DPYPTR,31]
06800		HRRZ A,DPYPTR
06900		JRST @RETURN
07000	
07100	INTERNAL NORELOPT,RELOPT
07200	NORELOPT:SETOM RELFLG
07300		POPJ P,
07400	
07500	RELOPT:	SETZM RELFLG
07600		POPJ P,
     

00100	
00200	INTERNAL GVECW,AIVECW,AVECW,APOINW,RIVECW,RVECW,RPOINW
00300	GVECW:	COMPAT(5)
00400		DPB C+1,[POINT 3,C,27]
00500		DPB C+2,[POINT 3,C,24]
00600		JRST LVCW
00700
00800	AIVECW:	MOVEI C,INV+AV
00900		JRST LVW
01000	AVECW:	MOVEI C,VIS+AV
01100		JRST LVW
01200	APOINW:	MOVEI C,EP+AV
01300	LVW:	COMPAT(2)
01400	LVCW:	DPB A,[POINT 11,C,10]
01500		DPB B,[POINT 11,C,21]
01600		MOVE A,C
01700		JRST @RETURN
01800
01900	RIVECW:	MOVEI C,INV+RV
02000		JRST LVW
02100	RVECW:	MOVEI C,VIS+RV
02200		JRST LVW
02300	RPOINW:	MOVEI C,EP+RV
02400		JRST LVW
     

00100	
00200	;SAIL DECLARATIONS
00300	;EXTERNAL INTEGER PROCEDURE LOCATE
00400	;EXTERNAL PROCEDURE DTYO(INTEGER CHAR)
00500	;EXTERNAL PROCEDURE DPYSST(STRING S);
00600	;EXTERNAL PROCEDURE DJUMP(INTEGER ADR)
00700	;EXTERNAL PROCEDURE DJSR(INTEGER ADR)
00800	;EXTERNAL PRODECURE FIXUP(INTEGER ADR,VAL)
00900	
01000	LOCATE:	HRRZ A,DPYPTR
01100		POPJ P,
01200	
01300	DTYO:	COMPAT(1)
01400		IDPB A,DPYPTR
01500		HRRZ A,DPYPTR
01600		CAML A,BUFEND
01700		JRST DPYOVF
01800		JRST @RETURN
01900	
02000	DPYSST:	POP SP,1
02100		POP SP,2
02200		HRRZS 2		;LENGTH
02300		JUMPLE 2,SSRET
02400		ILDB 3,1
02500		IDPB 3,DPYPTR
02600		SOJG 2,.-2
02700	SSRET:	HRRZ 1,DPYPTR
02800		CAML 1,BUFEND
02900		JRST	[POP P,RETURN
03000			JRST DPYOVF]
03100		POPJ P,
03200	
03300	DJUMP:	MOVEI C,1B31
03400		JRST DJ2
03500
03600	DJSR:	MOVEI C,24
03700	DJ2:	COMPAT(1)
03800		MOVSS A
03900		ADD C,A
04000		JRST LV2
04100
04200	FIXUP:	COMPAT(2)
04300		HRLM B,(A)
04400		JRST @RETURN
     

00100
00200	;SAIL DECLARATIONS
00300	;EXTERNAL PROCEDURE DPYOUT(INTEGER PIECE_OF_GLASS)
00400	;EXTERNAL PROCEDURE DPYCLR;
00500	;EXTERNAL PROCEDURE DPYBIG(INTEGER SIZE);
00600	;EXTERNAL PROCEDURE DPYTST;
00700	;EXTERNAL PROCEDURE HYDPOG(INTEGER PIECE_OF_GLASS)
00800	;EXTERNAL PROCEDURE CLRBFR;
00900	;EXTERNAL PROCEDURE DPYSET(INTEGER ARRAY BUF);
01000	
01100	
01200	; DPYTST TESTS TTY TO SEE IF IT IS A DPY 
01300	; III DPY=0, DATA DISK=1, OTHERWISE=-1
01400	INTERNAL DPYTST
01500	DPYTST:	SETOB 1,DPYFLG
01600		GETLIN 1
01700		TLNE 1,421000	;DPY OR PTY ON DPY?
01800		SETZM DPYFLG	;WE ARE ON A DPY
01900		TLNE 1,020000	;ON A DATA DISK?
02000		AOS DPYFLG
02100		MOVE 1,DPYFLG
02200		POPJ P,
02300	
02400	DPYBIG:	COMPAT(1)
02500		MOVEI 3,INV+RV	;ZERO LENGTH RELATIVE-INVISIBLE VECTOR
02600		DPB 1,[POINT 3,3,27]
02700		JRST LV2
02800	
02900	DPYBRT:	COMPAT(1)
03000		MOVEI 3,INV+RV
03100		DPB 1,[POINT 3,3,24]
03200		JRST LV2
03300	
03400	DPYCLR:	SKIPLE DPYFLG
03500		JRST	[PUSH P,[0]
03600			PUSHJ P,HYDPOG
03700			JRST .+1]
03800		SKIPL DPYFLG#
03900		DPYCLR
04000		MOVSI 777774
04100		MOVEM POGWD
04200		SETZM POGON
04300		SETZM BUFHD
04400		POPJ P,
04500	
04600	EXTERNAL IIICVT
04700	DPYOUT:	PUSHJ P,DPYPARS
04800		HRRZ B,DPYPTR
04900		SUB B,BUFHD
05000		ADDI B,1
05100		MOVEM B,BUFHD+1
05200		JSP POGSUB
05300		ORM 1,POGON#
05400	SH2:	COMPAT(1)
05500		DPB A,[POINT 4,SH1,12]
05600		JUMPL A,FALSE
05700		SKIPE A,DPYFLG
05800		JRST		[JUMPL A,FALSE
05900				MOVE A,BUFHD
06000				SUBI A,2
06100				PUSH P,A
06200				PUSH P,RETURN
06300				JRST IIICVT]
06400	SH1:	UPG BUFHD
06500	FALSE:	MOVEI A,0
06600		JRST @RETURN
06700	
06800	CLRBFR:	COMPAT(0)
06900		JRST CLR2
07000	
07100	DPYSET:	PUSHJ P,DPYTST
07200		COMPAT(1)
07300		ADDI 1,2
07400		MOVEM 1,BUFHD
07500		HRRZ 2,-3(1)	;SIZE
07600		ADDI 2,-3(1)
07700		MOVEM 2,BUFEND
07800	
07900	CLR2:	MOVE A,BUFHD
08000		MOVEI B,1
08100		MOVEM B,1(A)
08200		MOVEI B,2(A)
08300		HRLI B,1(A)
08400		BLT B,@BUFEND	;SET DPY BUFFER TO NULL CHARACTER WORDS
08500		JRST LV3
08600	
08700
08800	DPYPARS:	SKIPN 1,BUFHD
08900		POPJ P,
09000		MOVE 2,DPYPTR
09100		MOVEM 2,-2(1)
09200		MOVEI 2,2(2)
09300		SUB 2,1
09400		MOVEM 2,-1(1)
09500		SUBI 1,2
09600		POPJ P,
09700	
09800	DPYRESET:	COMPAT(1)
09900		JUMPE 1,@RETURN
10000		ADDI 1,2
10100		MOVEM 1,BUFHD
10200		HRRZ 2,-3(1)
10300		ADDI 2,-3(1)
10400		MOVEM 2,BUFEND
10500		HRRZ 2,-1(1)	;SIZE
10600		ADDI 2,-2(1)	;START ADR
10700		MOVE 1,2
10800		JRST CLR2+1
10900	
11000	INTERNAL DPYTYP,TYPLOC
11100	DPYTYP:	PUSHJ P,DPYTST
11200		COMPAT(3)
11300		SKIPGE DPYFLG
11400		JRST @RETURN
11500		DPYPOS(1)	;POSITION
11600		DPB 2,[POINT 9,3,26]
11700		DPYSIZ (3)
11800		JRST @RETURN
11900	
12000	TYPLOC:	PUSHJ P,DPYTST
12100		COMPAT(2)
12200		SKIPGE DPYFLG
12300		JRST @RETURN
12400		DPYPOS (1)
12500		SUB 1,2
12600		IDIVI 1,=46	;23 UNITS PER LINE
12700		CAIG 1,2
12800		MOVEI 1,2	;AT LEAST 2 GLITCHES
12900		LSH 1,=9
13000		DPYSIZ 2(1)	;2 LINES PER GLITCH
13100		JRST @RETURN
     

00100	;SAIL DECLARATIONS
00200	;EXTERNAL PROCEDURE PGSEL(INTEGER POG)
00300	;EXTERNAL PROCEDURE UPGMVM(INTEGER VAL;REFERENCE INTEGER ADR);
00400	;EXTERNAL INTEGER PROCEDURE UPGMVE(REFERENCE INTEGER ADR);
00500	
00600	INTERNAL PGSEL,UPGMVM,UPGMVE,GETPOG,RELPOG
00700	INTERNAL ACPOGS,ACCPOG,DACPOG,POGON;
00800	PGSEL:	COMPAT(1)
00900		JUMPL 1,@RETURN
01000		SKIPN DPYFLG
01100		PGSEL (1)
01200		JRST @RETURN
01300	
01400	UPGMVM:	COMPAT(2)
01500		SKIPN DPYFLG
01600		UPGMVM 1,(2)
01700		JRST @RETURN
01800	
01900	UPGMVE:	COMPAT(1)
02000		SKIPN DPYFLG
02100		UPGMVE 1,(1)
02200		JRST @RETURN
02300	
02400	POGWD:	XWD 777774,0
02500	
02600	GETPOG:	MOVE POGWD
02700		JFFO .+2
02800		MOVNI 1,1
02900		ROT (1)
03000		TLZ 400000
03100		MOVN 2,1
03200		ROT(2)
03300		MOVEM POGWD
03400		POPJ P,
03500	
03600	HYDPOG:
03700	RELPOG:	JSP POGSUB
03800		ORM 1,POGWD
03900		ANDCAM 1,POGON
04000		SETZM BUFHD+1
04100		SKIPG DPYFLG
04200		JRST SH2
04300	OPDEF DDOUT [XWD 715140,0]
04400		DDOUT	[DDCLR
04500			3]
04600		SUB P,[XWD 2,2]
04700		JRST @2(P)
04800	
04900	DDCLR:	136004001324
05000		136004001324
05100		0
05200	
05300	ACPOGS:	MOVS 1,-1(P)
05400		MOVSM 1,POGON
05500		SKIPN DPYFLG
05600		PGIOT 1,(1)
05700		SUB P,[XWD 2,2]
05800		JRST @2(P)
05900	
06000	POGSUB:	MOVN 2,-1(P)
06100		MOVSI 1,400000
06200		LSH 1,(2)
06300		JRST @0
06400	
06500	DACPOG:	JSP POGSUB
06600		ANDCA 1,POGON
06700	ACPOG2:	MOVSS 1
06800		JRST ACPOGS+1
06900	
07000	ACCPOG:	JSP POGSUB
07100		OR 1,POGON
07200		JRST ACPOG2
07300	
07400	RETURN:	0
07500	
07600	INTERNAL DPYPTR;
07700	DPYPTR:	0
07800	BUFEND:	0
07900	BUFHD:	0
08000		0
08100
     

00100	BEGIN DDCODE
00200	
00300	A←1
00400	B←2
00500	C←3
00600	D←4
00700	X←1
00800	Y←2
00900	PT←5
01000	N←6
01100	M←7
01200	SPT←10
01300	K←11
01400	P←17
01500	
01600	COFFY←2;
01700	CR←15
01800	LF←12
01900	
02000	INTERNAL IIIWD;
02100	EXTERNAL LINTAB,PTTAB,GFSIZX,GFSIZY,GFSIZL,X0,Y0,SCALX,SCALY,XCENT
02200	EXTERNAL YCENT,LMAR,CHRTBL,CHASP,CHSCAL
02300	↑IIIWD:	MOVEI K,1
02400		MOVE LINTAB
02500		HRRM LT1
02600		HRRM LT2
02700	
02800		MOVE PTTAB
02900		HRRM PT1
03000		HRRM PT2
03100		MOVE A,-1(P)
03200		POP P,-1(P)
03300		TRNE A,1
03400		JRST PSTR	;A STRING
03500		MOVE B,A
03600		ANDI B,17
03700		CAIN B,2
03800		JRST	[PUSH P,A		;SHORT VECTOR WORD
03900			LSH A,-24
04000			PUSHJ P,MKSVEC
04100			POP P,A
04200			LSH A,-4
04300			JRST MKSVEC]
04400		CAIE B,6
04500		POPJ P,
04600		LDB C,[POINT 3,A,27]		;LONG VECTOR WORD
04700		JUMPE C,MKLVEC
04800		MOVE C,CHSIZS(C)		;CHANGE CHARACTER SIZE
04900		MOVE D,CHSCAL
05000		FSC D,233
05100		FMP D,C
05200		FMP D,CHASP
05300		FIX D,233000
05400		MOVEM D,CHSCX#
05500		MOVE D,CHSCAL
05600		FSC D,233
05700		FMP C,D
05800		FIX C,233000
05900		MOVEM C,CHSCY#
06000		IMULI C,=12
06100		MOVEM D,CHSC12#
06200		MOVE C,CHSCY
06300		IMULI C,COFFY
06400		MOVEM C,COFCC#
06500	
06600	
06700	MKLVEC:	MOVE C,A
06800		LDB X,[POINT 11,C,10]
06900		LDB Y,[POINT 11,C,21]
07000		TRNE X,2000
07100		ORCMI X,3777
07200		TRNE Y,2000
07300		ORCMI Y,3777
07400		LDB C,[POINT 3,C,31]
07500		JRST MKVEC
07600	
07700	
07800	MKSVEC:	MOVE C,A
07900		LDB X,[POINT 7,C,26]
08000		LDB Y,[POINT 7,C,33]
08100		ANDI C,3
08200		TRNE X,100
08300		ORCMI X,77
08400		TRNE Y,100
08500		ORCMI Y,77
08600		
08700	MKVEC:	IMUL X,SCALX
08800		IMUL Y,SCALY
08900		MOVNS Y
09000		TRZE C,4
09100		JRST	[ADD X,XCENT		;ABSOLUTE VECTOR
09200			ADD Y,YCENT
09300			SUB X,X0
09400			SUB Y,Y0
09500			JRST .+1]
09600	MKV2:	JRST VTAB(C)
09700	
09800	VTAB:	JRST MKLINE			;VISIBLE VECTOR
09900		JRST MKPTR			;END POINT VECTOR
10000		JRST	[ADDB X,X0		;INVISIBLE VECTOR
10100			ADDB Y,Y0
10200			POPJ P,]
10300	CPOPJ:	POPJ P,				;DO NOTHING
10400	
10500	
10600	MKLINE:	PUSH P,X
10700		PUSH P,Y
10800		MOVM C,X
10900		MOVM D,Y
11000		CAMG C,D
11100		MOVE C,D			;C←MAX(C,D)
11200		HLRZM C,M;
11300		AOS M
11400		IDIV Y,M
11500		MOVEM Y,DY#
11600		IDIV X,M
11700		MOVEM X,DX#
11800		MOVE X,X0
11900		MOVE Y,Y0
12000	
12100	L:	HLRZ C,X
12200		HLRZ D,Y
12300		CAMGE C,GFSIZX
12400		CAML D,GFSIZY
12500		JRST L2				;OFF SCREEN
12600	LT1:	MOVE D,LINTAB(D)
12700	PT1:	DPB K,PTTAB(C)
12800	L2:	ADD X,DX
12900		ADD Y,DY
13000		SOJGE M,L
13100		POP P,Y
13200		POP P,X
13300	
13400	MKPTR:	ADDB X,X0
13500		ADDB Y,Y0
13600	
13700	MKPT:	HLRZ C,X
13800		HLRZ D,Y
13900		CAMGE C,GFSIZX
14000		CAML D,GFSIZY
14100		POPJ P,				;OFF SCREEN
14200	LT2:	MOVE D,LINTAB(D)
14300	PT2:	DPB K,PTTAB(C)
14400		POPJ P,
14500	
14600	
14700	CHARS:	0
14800		0
14900	
15000	PSTR:	MOVEM A,CHARS
15100		MOVE COFCC
15200		ADDM Y0
15300		MOVE PT,[POINT 7,CHARS,-1]
15400	
15500	CLOOP:	ILDB N,PT
15600		JUMPE N,	[MOVN COFCC
15700				ADDM Y0
15800				POPJ P,]
15900		CAIN N,CR
16000		JRST	[MOVE A,LMAR		;CARRIAGE RETURN
16100			MOVEM A,X0
16200			JRST CLOOP]
16300		CAIN A,LF
16400		JRST	[MOVE A,CHSC12		;LINE FEED
16500			ADDM A,Y0
16600			JRST CLOOP]
16700		HLRZ SPT,CHRTBL(N)
16800		HRLI SPT,(<POINT 5,0>)
16900		HRRZ N,CHRTBL(N)
17000	SLOOP:	JUMPLE N,CLOOP
17100		ILDB C,SPT
17200		ILDB X,SPT
17300		ILDB Y,SPT
17400		TRNE X,20
17500		ORCMI X,37
17600		TRNE Y,20
17700		ORCMI Y,37
17800		MOVNS Y
17900		IMUL X,CHSCX
18000		IMUL Y,CHSCY
18100		JUMPE C,	[PUSHJ P,MKPTR
18200				JRST LX1]
18300		CAIE C,2
18400		JRST	[ADDM X,X0
18500			ADDM Y,Y0
18600			SOJA N,SLOOP]
18700		PUSHJ P,MKLINE
18800	LX1:	SOJA N,SLOOP
18900	
19000	CHSIZS:	1.33
19100		2.01
19200		2.34
19300		2.67
19400		4.01
19500		5.33
19600		8.13
19700	
19800	BEND DDCODE
     

00100	BEGIN GODRAW
00200	
00300	Y←1
00400	X←2
00500	AC3←3
00600	AC4←4
00700	AC5←5
00800	CHR←6
00900	HPOS←7
01000	POS←10
01100	P←17
01200	
01300		INTERN PUTBWB
01400		EXTERN DDBUF
01500	
01600	PUTBWB:	MOVEM 1,SAVE4#		;SAVE AC'S 1,7,AND 10
01700		MOVEM 7,SAVE7#
01800		MOVEM 10,SAVE10#
01900		MOVE CHR,-1(P)	;CHARACTER
02000		MOVE Y,-2(P)	;BOARD POSITON
02100		IDIVI Y,=21	;X IN AC2
02200		CAILE Y,0
02300		CAIL Y,=20
02400		JRST BWBEND
02500		CAILE X,0
02600		CAIL X,=20
02700		JRST BWBEND
02800		MOVE HPOS,Y
02900		IMULI HPOS,=19	;19 LINES PER SQUARE
03000		IDIVI HPOS,4	;WHICH VERTICAL SUBFIELD?
03100		IMULI POS,=1300	;SUBFIELD OFFSET
03200		IMULI HPOS,=13	;13 WORDS PER LINE
03300		ADD POS,HPOS	;VERTICAL OFFSET
03400		MOVE AC3,X
03500		ADDI AC3,4	;TWO WORD HEADER ON EACH LINE
03600		IDIVI AC3,2	;REMAINDER GOES TO AC4
03700		ADD POS,AC3	;ADD HORIZONTAL OFFSET
03800		HRLZI AC5,(<POINT 16,0(POS),15>)	;ODD COLUMNS
03900		SKIPE AC4
04000		HRLZI AC5,(<POINT 16,0(POS),31>)	;EVEN COLUMNS
04100		HRR AC5,DDBUF
04200		MOVEM AC5,POINTER#
04300	
04400		CAIN CHR,102
04500		JRST BLACK
04600		CAIN CHR,127
04700		JRST WHITE
04800	
04900	EMPTY:	SETZM HDCPT#
05000		CAIE Y,4
05100		CAIN Y,=10
05200		JRST TRYX
05300		CAIE Y,=16
05400		JRST NOHCP
05500	TRYX:	CAIE X,4
05600		CAIN X,=10
05700		JRST HCP
05800		CAIE X,=16
05900		JRST NOHCP
06000	HCP:	SETOM HDCPT
06100	NOHCP:	MOVEI CHR,200	;VERTICAL LINE
06200		CAIN Y,1	;TOP MARGIN
06300		HRRZI CHR,	;BLANK
06400		MOVEI AC3,7
06500		PUSHJ P,DEPOSIT
06600		SOJG AC3,.-1
06700		SKIPE HDCPT
06800		MOVEI CHR,700	;HANDICAP DOT
06900		PUSHJ P,DEPOSIT
07000		SKIPE HDCPT
07100		MOVEI CHR,1740
07200		PUSHJ P,DEPOSIT
07300		MOVEI CHR,-1	;HORIZONTAL LINE
07400		CAIN X,1	;LEFT MARGIN
07500		MOVEI CHR,377	;LINE TO RIGHT
07600		CAIN X,=19	;RIGHT MARGIN
07700		MOVEI CHR,177600	;LINE TO LEFT
07800		PUSHJ P,DEPOSIT
07900		CAIE Y,=19	;BOTTOM MARGIN
08000		JRST FINISH
08100		HRRZI CHR,
08200		MOVEI AC3,=9
08300		PUSHJ P,DEPOSIT
08400		SOJG AC3,.-1
08500		JRST BWBEND
08600	FINISH:	MOVEI CHR,200	;VERTICAL LINE
08700		SKIPE HDCPT
08800		MOVEI CHR,1740	;HANDICAP DOT
08900		PUSHJ P,DEPOSIT
09000		SKIPE HDCPT
09100		MOVEI CHR,700
09200		PUSHJ P,DEPOSIT
09300		MOVEI CHR,200
09400		MOVEI AC3,7
09500		PUSHJ P,DEPOSIT
09600		SOJG AC3,.-1
09700		JRST BWBEND
09800	
09900	BLACK:	MOVEI AC3,BLKWRD
10000		JRST WHITE+1
10100	WHITE:	MOVEI AC3,WHTWRD
10200		HRLI AC3,-=19
10300		MOVE CHR,(AC3)
10400		PUSHJ P,DEPOSIT
10500		AOBJN AC3,.-2
10600	BWBEND:	MOVE 1,SAVE4		;RESTORE AC'S
10700		MOVE 7,SAVE7
10800		MOVE 10,SAVE10
10900		SUB P,[XWD 3,3]
11000		JRST @3(P)
11100	
11200	DEPOSIT:DPB CHR,POINTER
11300		ADDI POS,=1300	;NEXT SUBFIELD
11400		CAIL POS,=5200	;MAX DDBUF
11500		SUBI POS,=5187	;SUB 4 SUBFIELDS AND ADD 1 LINE
11600		POPJ P,
11700	
11800	WHTWRD:	OCT 1700,7760,17770,37774,77776,77776,177777,177777,177777,177777
11900		OCT 177777,177777,177777,77776,77776,37774,17770,7760,1700
12000	BLKWRD:	OCT 1700,6060,10010,20004,40002,40002,100001,100001,100001,100001
12100		OCT 100001,100001,100001,40002,40002,20004,10010,6060,1700
12200	
12300	BEND GODRAW
     

00100	BEGIN SWAPPER
00200		INTERN SWAPIT
00300	
00400	SWAPIT:	HRROI 2,-1
00500		GETLIN 2
00600		TLNE 2,20000	
00700		POPJ 17,
00800		HRRZI 1,INFO
00900		CALL 1,[SIXBIT /SWAP/]
01000	INFO:	SIXBIT /DSK/
01100		SIXBIT /IIIGO/
01200		SIXBIT /DMP/
01300		0
01400		SIXBIT /  1  3/
01500	BEND SWAPPER
01600	END